package org.grow.sha.service;

import org.grow.sha.dao.TinyTask;
import org.grow.sha.entity.Account;
import org.grow.sha.serviceAop.Tab;
import org.grow.sha.serviceAop.ValidatePosition;
import org.grow.sha.tool.RobotEx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.awt.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;

@Component
public class BlueActivity {
    @Autowired
    private RobotEx robot;
    Logger logger = LoggerFactory.getLogger(BlueActivity.class);
    public static final Color tagColor1 = new Color(187, 2, 2);
    //    是否有待升阶的武将
    public static final Color tagColor2 = new Color(30, 19, 7);
    //    等待关闭按钮
    public static final Color tagColor3 = new Color(186, 129, 66);
//    new Color(198,156,58) 987 671
    public static final Color tagColor4 = new Color(198,156,58);

    @Tab
    @ValidatePosition
    public void tagAbout(Account account, boolean levelUp) {
//        点击　武将 进入武将页面
        robot.moveAndClick(1108, 550);
        robot.waitAppear(987,671,tagColor4);
//        robot.delay(2000);
        /*获取免费将印*/
//        3 : java.awt.Point[x=1167,y=697]
//        java.awt.Color[r=181,g=5,b=3] 红色
        Color p0 = robot.getPixelColor(1165, 696);

        if (robot.almostSameTo(p0,tagColor1)) {
            robot.moveAndClick(1140, 672);
            robot.delay(1000);
//            开启将印
//            将印左按钮
//            robot.moveAndClick(256, 412);
//            将印抽取下按钮
//            robot.moveAndClick(500, 657);
//            抽取一次按钮
            robot.moveAndClick(915, 655);
            robot.delay(1000);
//            关闭界面按钮
            robot.moveAndClick(1145, 228);
            logger.info(account.getUsername() + "开启一次免费普通将印宝箱");
        }
//
        /*升阶*/
//        选择一阶
        if (levelUp) {


            robot.moveAndClick(459, 653);
            robot.delay(2000);
//        java.awt.Color[r=25,g=11,b=4]
//11 : java.awt.Point[x=381,y=376]
            Color p = robot.getPixelColor(381, 376);
//        if (!p.equals(new Color(25, 11, 4))) {
            if (!robot.closeTo(p, tagColor2)) {
                robot.moveAndClick(381, 376);
                robot.delay(1000);
//            点击升阶
                robot.moveAndClick(480, 630);

//            todo 判断印数量是否足够问题 一般情况普通将印是足够的
//           有足够的印则 [x=972,y=629]
//java.awt.Color[r=62,g=15,b=5]
//            if ()
//            点击升阶按钮
                robot.moveAndClick(982, 653);
//            robot.delay(2000);
//            两个关闭按钮
//            robot.moveAndClick(884, 713);
//            todo 待测试
//            Color c =new Color(186,129,66);
                robot.waitThenClick(889, 715, tagColor3);
//                while (true) {
//                    if (robot.getPixelColor(889, 715).equals(tagColor3)) {
//                        break;
//                    }
//                    robot.delay(1500);
////                System.out.println("等待一次将印升级结果，反复出现可能需要调试");
//                }
//                robot.moveAndClick(889, 715);

//          点击右上关闭
                robot.moveAndClick(1143, 231);
//            两个返回按钮
                robot.moveAndClick(220, 640);
                logger.info(account.getUsername() + "消耗一个将印完成一次武将升阶");

            }
        }
//        robot.moveAndClick(220, 640);
//        可以使用核心点返回
//        robot.delay(1000);
    }

    //    708 454 =>红色 22 0-8点警告
    public static final Color prepareColor5 = new Color(227, 47, 30);
    //    827 505 =>黄色 22 0-8点警告 取消按钮
    public static final Color prepareColor6 = new Color(119, 97, 74);
    public static final Color prepareColor1 = new Color(20, 15, 5);
    public static final Color prepareColor2 = new Color(48, 32, 12);
    public static final Color prepareColor11 = new Color(185,182,179);
    public static final Color prepareColor12 = new Color(53,62,81);

    @Tab
    public void loginPrepare(String username, String password) throws InterruptedException {
//687 424 new Color(185,182,179)正常登录框 --> new Color(65,76,94) 登录未退出-->others
//        先点击刷新按钮
        robot.moveAndClick(155, 110);
        robot.delay(2000);
//        乐观模式
        int k =3;
        while (k>0) {
            Color t = robot.getPixelColor(687, 418);
//            如果是白色 表示正常登录 直接退出循环
            if (robot.closeTo(t, prepareColor11)) break;
//            如果是黑色 表示上次登录未退出界面 ,点击退出按钮 进一步判断
            if (robot.closeTo(t, prepareColor12)) {
                robot.moveAndClick(714, 550);
                robot.delay(3000);
                continue;
            }
            robot.moveAndClick(155, 110);
            robot.delay(3000);
            k--;
        }

//        点击刷新按钮　和退出登录按钮
//        robot.moveAndClick(155, 110);
//        robot.delay(2000);
////        如果是黑色的　表示有账号已经在登录　不是黑色表示没有账号登录
//        Color logout = robot.getPixelColor(742, 550);
//        if (logout.equals(prepareColor1)) {
//            robot.moveAndClick(714, 550);
//        }

//        登录页面　锁定光标输入用户名密码　登录
//        while (true) {
//
//            TimeUnit.SECONDS.sleep(2);
//            Color color2 = robot.getPixelColor(854, 321);
//            if (color2.equals(new Color(48, 32, 12))) break;
//

//            timeout++;
//            if (timeout > 3) throw new RuntimeException("转登录界面超时");
//        }
//        timeout = 0;
//        等到用户名的颜色出现并点击
//        robot.waitThenClick(854, 321, prepareColor2);

//用户名
        robot.moveAndClick(854, 321);

        robot.input(username);
        robot.moveAndClick(994, 345);
//密码
        robot.moveAndClick(854, 373);
//        消除可能存在的密码下拉框
//        robot.click();
        robot.input(password);
        robot.moveAndClick(994, 345);
//登录
        robot.moveAndClick(781, 480);
        TimeUnit.SECONDS.sleep(1);
//        十周年登录
        robot.moveAndClick(866, 400);
        robot.moveAndClick(900, 550);
//做的不周全暂用　
        TimeUnit.SECONDS.sleep(12);
        robot.moveAndClick(232, 139);
        robot.click(2000);
        robot.click(2000);

//      ０点到８点的提示

        robot.delay(1000);
        if (robot.getPixelColor(708, 454).equals(prepareColor5)
                && robot.getPixelColor(827, 505).equals(prepareColor6)) {
            robot.moveAndClick(827, 505);
        }
//      todo :策略需要修改　稳定差
//        以下是可能出现的弹窗　关闭之
//        活动广告弹窗　较小
        robot.mouseMove(1043, 281);
        robot.delay(1000);
        if (robot.getPixelColor(1043, 281).equals(new Color(214, 160, 58))) {
            robot.click();
        }
//        月签到弹窗　较大
        robot.mouseMove(1176, 230);
        robot.delay(1000);
        if (robot.getPixelColor(1176, 230).equals(new Color(222, 175, 62))) {
            robot.click();
        }
        logger.info(username + "登录与准备成功");

////        吴江列传颜色
//        [r=200,g=179,b=121]
////        主界面夜色
//        [r=73,g=18,b=16]
////        逐鹿天下颜色
//        [r=220,g=200,b=140]
//          欢乐成双竞技
//        [r=236,g=215,b=148]


    }

    public static final Color invitationColor1 = new Color(195, 135, 66);

    public boolean closeInvitation(String username) {
        return this.invitation(robotEx -> {
            robotEx.moveAndClickQuick(889, 448);
            logger.info(username + " 暂时关闭好友邀请");
        });
/*        robot.moveAndClick(1228, 144);
        robot.delay(1500);

        if (robot.getPixelColor(830, 560)
                .equals(invitationColor1)) {
            //            点击下拉列表
            robot.moveAndClick(944, 376);
//            选择禁止旁人邀请
            robot.moveAndClickQuick(889, 448);

//            选择保存
            robot.moveAndClickQuick(830, 560);
            //            归位
            robot.moveAndClick(1246, 450);
            logger.info(username + " 暂时关闭好友邀请");
            return true;
        }
//        弹出框关闭按钮
        robot.moveAndClick(977, 341);
        return false;*/
    }

    public boolean openInvitation(String username) {
/*        robot.delay(1000);
        robot.moveAndClick(1228, 144);
        robot.delay(1500);
        if (robot.getPixelColor(830, 560)
                .equals(invitationColor1)) {
//            点击下拉列表
            robot.moveAndClick(944, 376);
//            选择第一个允许旁人邀请
//            robot.moveAndClickQuick(889, 396);
            //            选择只有好友邀请
            robot.moveAndClick(889,430);
//            保存按钮
            robot.moveAndClickQuick(830, 560);
//            归位
            robot.moveAndClick(1246, 450);
            logger.info(username + " 重新开启好友邀请");
            return true;
        }
        //        弹出框关闭按钮
        robot.moveAndClick(977, 341);
        return false;*/
        return this.invitation((robot -> {
            robot.moveAndClick(889, 430);
            logger.info(username + " 重新开启好友邀请");
        }));
    }

    //    749 303
    public static final Color invitationColor2 = new Color(125, 60, 14);

    public boolean invitation(Consumer<RobotEx> c) {
        robot.keepClickUntilTarget(1228, 144, 749, 303, invitationColor2);

//          展开下拉列表
        robot.moveAndClick(944, 376);
//            选择第一个允许旁人邀请
//            robot.moveAndClickQuick(889, 396);
        //            选择只有好友邀请
        c.accept(robot);
//            保存按钮
        robot.moveAndClickQuick(830, 560);
//           空闲点 归位
        robot.moveAndClick(1246, 450);
        return true;

//
//        //        弹出框关闭按钮
//        robot.moveAndClick(977, 341);

    }

    @Autowired
    private TinyTask tinyTask;
    //    181 359
    public static final Color dailyWarColor1 = new Color(83, 41, 75);
    //    176,534
    public static final Color dailyWarColor2 = new Color(48, 26, 12);
    //    321 549
    public static final Color dailyWarColor3 = new Color(46, 25, 15);

    @ValidatePosition
    @Tab
    public void dailyWar(Account account) {
        //        按钮　武将列传
        if (account.getDailyWarLevel() < 1) return;
        robot.moveAndClick(993, 550);
        robot.waitThenClick(183, 359, dailyWarColor1);

//        进入动画按钮
        robot.moveAndClick(777, 630);
//        跳过动画
        robot.keepClickUntil(176, 534, dailyWarColor2);

//        选择关羽
        robot.keepClickUntil(321, 549, dailyWarColor3);
//

        for (int i = 0; i < account.getDailyWarLevel(); i++) {
            tinyTask.expWar();
        }
        logger.info(account.getUsername()+"日常武将列传");

    }
}
